#!/sbin/openrc-run

extra_started_commands="reload"

depend() {
    use net
    after postgresql
}

get_config() {
    [ -f "${INIFILE}" ] || eend 1 "'${INIFILE}' not found"

    eval echo $(sed -e 's:;.*::' "${INIFILE}" | \
        awk '$1 == "'$1'" { print ($2 == "=" ? $3 : $2) }')
}

PIDFILE="$(get_config pidfile)"
UNIX_SOCKET_DIR="$(get_config unix_socket_dir)"

prep() {
    if [ -n "${UNIX_SOCKET_DIR}" ] ; then
        checkpath -o postgres:postgres -m 0775 -d "${UNIX_SOCKET_DIR}" \
            || return 1
    fi
    checkpath -o pgbouncer:postgres -m 0755 -d "$(dirname ${PIDFILE})" \
        || return 1
    checkpath -o pgbouncer:postgres -m 0644 -f "${PIDFILE}" \
        || return 1
    checkpath -o pgbouncer:postgres -m 0755 -d "$(dirname $(get_config logfile))" \
        || return 1
    checkpath -o pgbouncer:postgres -m 0640 -f "$(get_config logfile)" \
        || return 1

    return 0
}

start() {
    ebegin "Starting PgBouncer"
    prep
    local ret=$?
    if [ $ret -ne 0 ] ; then
        eend $ret
        exit $ret
    fi
    start-stop-daemon --start \
        --pidfile ${PIDFILE} \
        --user pgbouncer \
        --exec /usr/bin/pgbouncer -- -q -d "${INIFILE}"
    eend $?
}

stop() {
    local seconds=$(( ${NICE_TIMEOUT} + ${FORCE_QUIT_TIMEOUT} ))
    ebegin "Stopping PgBouncer (this can take up to ${seconds} seconds)"

    local retries=SIGINT/${NICE_TIMEOUT}

    if [ "${FORCE_QUIT}" = "YES" ] ; then
        einfo "FORCE_QUIT enabled."
        retries="${retries}/SIGTERM/${FORCE_QUIT_TIMEOUT}"
    fi

    # Loops through nice and force quit in one go.
    start-stop-daemon --stop \
        --pidfile ${PIDFILE} \
        --retry ${retries}

    eend $?
}

restart() {
    if [ -n "${UNIX_SOCKET_DIR}" ] ; then
        ebegin "Performing online restart of PgBouncer"
        start-stop-daemon --start \
            --pidfile ${PIDFILE} \
            --user pgbouncer \
            --exec /usr/bin/pgbouncer -- -q -d -R "${INIFILE}"
        eend $?
    else
        stop && start
    fi
}

reload() {
    ebegin "Reloading PgBouncer configuration from '${INIFILE}'"
    start-stop-daemon --signal HUP --pidfile ${PIDFILE}
    eend $?
}
